#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
项目名称 ：HomeWork0829 
脚本名称 ：base_page.py
开发环境 ：PyCharm 
开发人员 ：林
编写时间 ：2021/9/2 21:26 
'''
from time import sleep

import pytest
import yaml
from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver

"""
公共类，作为所有页面的父类，添加公共方法
1）driver实例化
2）封装查找单个元素方法find
3)封装查找一组元素方法finds
"""
class BasePage:
    #起始页面url
    _base_url =""

    # 实例化driver,默认第一次实例化driver时base_driver为none，为避免页面重复实例化，打开多个页面，只在base_driver=none的时候进行实例化
    def __init__(self, base_driver: WebDriver = None):
        if (base_driver == None):
            self.driver = webdriver.Chrome(executable_path="../drivers/chromedriver.exe")
            self.driver.maximize_window()
            # 打开企业微信首页
            self.driver.get(self._base_url)
            # 添加cookie
            cookies = yaml.safe_load(open("../conf/cookie.yml"))

            # 添加隐式等待
            self.driver.implicitly_wait(3)

            for cookie in cookies:
                self.driver.add_cookie(cookie)
            sleep(3)
            # 再次打开企业微信首页
            self.driver.get(self._base_url)
        else:
            self.driver = base_driver

    def quit(self):
        self.driver.quit()

    def find(self,by,locator=None):
        """
        定位单个元素
        :param by: 定位方法
        :param locator:定位元素
        :return: 返回元素对象
        """
        if locator==None:
            #find参数为元组
            element = self.driver.find_element(*by)
        else:
            #find参数为两个变量
            element = self.driver.find_element(by,locator)
        #输出元素
        print(f"定位单个元素为:{element}")
        return element

    def finds(self,by,locator=None):
        """
        定位一组元素
        :param by: 定位方法
        :param locator: 定位元素
        :return: 返回一组元素
        """
        if locator == None:
            elements = self.driver.find_elements(*by)
        else:
            elements =  self.driver.find_elements(by,locator)
        #输出一组元素
        print(f"定位的一组元素为:{elements}")
        return elements